package com.qst.order.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qst.order.domain.DTO.StatusCount;
import com.qst.order.domain.Order;
import com.qst.order.domain.OrderItem;
import com.qst.order.domain.VO.OrderListVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@Mapper
public interface OrderMapper extends BaseMapper<Order> {

    IPage<OrderListVO> getOrderListByUserId(IPage<OrderListVO> page, @Param("userId") Integer userId,@Param("status") String status
                                           ,@Param("orderNo") String orderNo,
                                            @Param("startDate") String startDate,
                                            @Param("endDate") String endDate);

    OrderListVO getOrderByOrderId(Integer orderId);


    IPage<OrderItem> getOrderByMerchantId(
            IPage<OrderItem> page,  // 分页参数（MyBatis-Plus分页）
            @Param("merchantId") Integer merchantId,  // 商家ID（从token解析）
            @Param("status") String status,  // 订单状态
            @Param("startDate") String startDate,  // 开始日期
            @Param("endDate") String endDate,  // 结束日期
            @Param("sortType") String sortType,  // 排序类型
            @Param("searchKey") String searchKey  // 搜索关键词
    );

    List<StatusCount> selectStatusCount(LocalDate start, LocalDate  end, Integer merchantId);

    @Update("update t_order set status = #{status} ,refund_time=now() where order_id = #{orderId}")
    void updateOrderStatus(Integer orderId, String status);



    // 订单统计
    // 今日订单数
    Integer countTodayOrders(@Param("today") LocalDate today);

    // 订单趋势：添加 @MapKey("date")，指定用 "date" 列作为 Map 的键
    @MapKey("date")
    List<Map<String, Object>> getOrderTrend(@Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);

    // 今日销售额
    BigDecimal sumTodaySales(@Param("today") LocalDate today);

    // 销售额趋势：添加 @MapKey("date")，指定用 "date" 列作为 Map 的键
    @MapKey("date")
    List<Map<String, Object>> getSalesTrend(@Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);

    // 订单状态分布

    @MapKey("status_name")
    List<Map<String, Object>> getStatusDistribution();
}
